package sword.offer;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 请实现 copyRandomList 函数，复制一个复杂链表。
 * 在复杂链表中，每个节点除了有一个 next 指针指向下一个节点，还有一个 random 指针指向链表中的任意节点或者 null。
 * 链接：https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof
 *
 * @author 胡宇轩
 * @Email: yuxuan.hu01@bianlifeng.com
 */
public class ThirtyFive {
    public void run() {
    }


    class Node {
        int val;
        Node next;
        Node random;

        public Node(int val) {
            this.val = val;
            this.next = null;
            this.random = null;
        }
    }

    class Solution {
        Map<Node, Node> map = new HashMap<>();

        public Node copyRandomList(Node head) {
            if (head == null) {
                return null;
            }
            if (!map.containsKey(head)) {
                Node newNode = new Node(head.val);
                map.put(head, newNode);
                newNode.next = copyRandomList(head.next);
                newNode.random = copyRandomList(head.random);
            }
            return map.get(head);
        }
    }
}


